package com.bestcem.xm.om.dao.mapper;

import com.bestcem.xm.om.controller.param.MessageParam;
import com.bestcem.xm.om.controller.param.NoticeInfoParam;
import com.bestcem.xm.om.entity.SmsRecord;
import org.apache.ibatis.annotations.Mapper;

import java.time.LocalDateTime;
import java.util.List;


/**
 * (DsOmSmsRecord)表数据库访问层
 *
 * @author xuan.yang
 * @since 2022-01-14 14:30:52
 */
@Mapper
public interface SmsRecordMapper {
    /**
     * 根据批次id查询
     *
     * @param batchId 批次id
     * @return java.util.List<com.bestcem.xm.om.entity.mongo.SmsRecord>
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/11/19 16:31
     */
    List<SmsRecord> listByBatchId(String batchId);

    /**
     * 根据id列表查询
     *
     * @param idList id列表
     * @return java.util.List<com.bestcem.xm.om.entity.mongo.SmsRecord>
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/11/19 17:36
     */
    List<SmsRecord> listByIds(List<String> idList);

    /**
     * 根据条件查询该批次的数量
     *
     * @param noticeInfoParam
     * @return
     * @author xuan.yang@idiaoyan.com
     * @date 2021/11/22 14:50
     */
    Long countByCondition(NoticeInfoParam noticeInfoParam);

    /**
     * 根据条件查询数目，page为空返回查询所有的列表
     * 用于导出的时候使用
     *
     * @param noticeInfoParam
     * @return
     * @author xuan.yang@idiaoyan.com
     * @date 2021/11/22 14:51
     */
    List<SmsRecord> listByCondition(NoticeInfoParam noticeInfoParam);

    /**
     * 批量保存短信记录
     * 返回保存的数目
     *
     * @param smsRecordList
     * @return
     * @author xuan.yang@idiaoyan.com
     * @date 2021/11/23 17:24
     */
    Integer saveBatch(List<SmsRecord> smsRecordList);


    /**
     * 根据批次id删除记录
     *
     * @param batchId
     * @return
     * @author xuan.yang@idiaoyan.com
     * @date 2021/11/30 14:56
     */
    Long removeRecordByBashId(String batchId);

    /**
     * 更新方法
     *
     * @param smsRecord
     * @return void
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/11/29 17:38
     */
    void update(SmsRecord smsRecord);

    /**
     * 获取短信明细总数
     *
     * @param param
     * @param ids
     * @return pageDTO
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/11/29 17:38
     */
    Integer countByMessageParam(MessageParam param, List<String> ids);

    /**
     * 获取短信分页明细,默认按创建时间降序排序,即最新的在前
     *
     * @param param
     * @param ids
     * @return pageDTO
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/11/29 17:38
     */
    List<SmsRecord> listByMessageParam(MessageParam param, List<String> ids);

    /**
     * 根据id查询记录
     *
     * @param id
     * @return com.bestcem.xm.om.entity.mongo.SmsRecord
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/12/4 11:47
     */
    SmsRecord findById(String id);

    /**
     * 根据id列表和batchid，更新发送状态
     *
     * @param batchId
     * @param idList
     * @param sendStatus
     * @param updateTime
     * @return void
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/12/7 18:10
     */
    void updateSendStatus(String batchId, List<String> idList, Integer sendStatus, LocalDateTime updateTime);

    /**
     * 通过批次id列表和发送状态查询短信记录列表
     *
     * @param batchId
     * @param sendStatus
     * @return java.util.List<com.bestcem.xm.om.entity.mongo.SmsRecord>
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/12/8 14:48
     */
    List<SmsRecord> listByBatchIdAndStatus(String batchId, Integer sendStatus);

    /**
     * 获取有链接点击时间，没有登录时间的记录
     *
     * @param from
     * @return void
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/12/8 22:56
     */
    List<SmsRecord> listByVistedTime(LocalDateTime from);

    /**
     * 根据状态统计对应数据量
     *
     * @param batchId
     * @param sendStatus
     * @return int
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/12/10 16:34
     */
    long countByStatus(String batchId, Integer sendStatus);

    /**
     * 保存单条记录
     * @param smsRecord
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/12/15 1:13
     */
    void insert(SmsRecord smsRecord);

    /**
     * 统计批次中链接被访问的数据
     *
     * @param batchId
     * @return void
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/12/16 11:50
     */
    Long countLinkVisited(String batchId);

    /**
     * 统计批次中成功数量
     *
     * @param batchId
     * @return java.lang.Long
     * @author zhangfeng <feng.zhang@idiaoyan.com>
     * @date 2021/12/20 10:33
     */
    Long countSuccess(String batchId);
}

